

/**
 * 数组的格式化结构的item
 */
class EnumStatusItem {
  constructor(value, key, defaultIndex, ...options) {
    this.value = value
    this.key = key
    this.defaultIndex = defaultIndex
    this.options = options
    this.status = ''
  }

  /**
   * 获取i18字符名称
   * @returns 获取i18字符名称
   */
  getName() {
    if (this.value) {
      return i18nText('objectStatus.' + this.status + '.' + this.value, this.options[this.defaultIndex])
    } else {
      return this.options[this.defaultIndex]
    }
  }
}

/**
 * 数组的格式化结构
 **/
export class EnumStatus {
  constructor(arr) {
    this.arr = arr
  }

  /**
   * 获取i18字符名称
   * @returns 获取i18字符名称
   */
  getName(code) {
    for (const index in this.arr) {
      var data = this.arr[index]
      if (typeof (code) === 'boolean') {
        if (code === Boolean(data.key)) {
          return data.getName()
        }
      } else if (code === data.value || code === data.key) {
        return data.getName()
      }
    }
    return code
  }

  /**
   * 获取国家名称
   * @param code 国家代码
   * @returns {*} 国家名称
   */
  getCountryName(code) {
    for (const index in this.arr) {
      var data = this.arr[index]
      if (typeof (code) === 'boolean') {
        if (code === Boolean(data.key)) {
          return data.getName()
        }
      } else if (code === data.value || code === data.key) {
        return data.options[3]
      }
    }
    return code
  }

  // 根据 value 获取 name
  getDataArray() {
    return this.arr
  }

  /**
   * 从数组中获取指定项
   */
  getArrayItem(code) {
    for (const index in this.arr) {
      var data = this.arr[index]
      if (code === data.value || code === data.key) {
        return data
      }
    }
    return new EnumStatusItem('', '', '')
  }

  static getEnumStatus(obj) {
    var arr = []
    for (const index in obj) {
      var data = obj[index]
      var status = ''
      for (const index in enums) {
        if (obj === enums[index]) {
          status = index
        }
      }
      var s = {}
      var defaultIndex = 1
      if (Array.isArray(data)) {
        if (data.length >= 2) {
          defaultIndex = 1
        } else {
          defaultIndex = 0
        }
        s = new EnumStatusItem(index, data[0], defaultIndex, ...data)
        s.status = status
        arr.push(s)
      } else {
        s = new EnumStatusItem(index, data, 0, [index, data])
        s.status = status
        arr.push(s)
      }
    }

    return new EnumStatus(arr)
  }
}



export const enums = {
  /**
   * 获取数组的格式化结构 EnumStatus
   * @param {*} arr
   * @returns
   */
  getEnumStatus(arr) {
    return EnumStatus.getEnumStatus(arr)
  },

  CountryEnum: {
    CHN: ['CHN', '中国', '142', 'zh', true],
    USA: ['USA', '美国', '502', 'en', true],
    SGP: ['SGP', '新加坡', '132', 'SGP', true],
    JPN: ['JPN', '日本', '116', 'JPN', true],
    KOR: ['KOR', '韩国', '133', 'KOR', true],

    CAN: ['CAN', '加拿大', '501', 'CAN', true],
    AUS: ['AUS', '澳大利亚', '601', 'AUS', true],
    LAO: ['LAO', '老挝', '119', 'LAO', true],
    MMR: ['MMR', '缅甸', '106', 'MMR', true],
    THA: ['THA', '泰国', '136', 'THA', true],

    BRN: ['BRN', '文莱', '105', 'BRN', true],
    NZL: ['NZL', '新西兰', '609', 'NZL', true],
    IDN: ['IDN', '印度尼西亚', '112', 'IDN', true],
    VNM: ['VNM', '越南', '141', 'VNM', true],
    EU: ['EU', '欧盟', 'eu', 'en', false],
    MYS: ['MYS', '马来西亚', '122', 'en', true],
    KHM: ['KHM', '柬埔寨', '107', 'en', true],

    PER: ['PER', '秘鲁', '434', 'PER', true],
    MUS: ['MUS', '毛里求斯', '231', 'MUS', true],
    CHL: ['CHL', '智利', '412', 'CHL', true],
    ISL: ['ISL', '冰岛', '322', 'ISL', true],
    GEO: ['GEO', '格鲁吉亚', '337', 'GEO', true],
    PAK: ['PAK', '巴基斯坦', '127', 'PAK', true],
    CHE: ['CHE', '瑞士', '331', 'CHE', true],

    ASEAN: ['ASEAN', '东盟', 'ASEAN', 'asean', false],
    ALL: ['ALL', '全球', '999', 'All', false]
  },

  SaleChannelEnum: {
    TIK_TOK: ['TikTok', 1],
    X: ['X(Twitter)', 2],
  }

}
